#include<iostream>

//static：1、由类进行初始化
//        2、不和具体对象对应
//        3、被所有对象共享
class Test
{
public:
    Test()
    {
        a++;
    }
    ~Test()
    {
        a--;
    }
    
    //静态成员函数：1、不和某个对象对应
    //              2、没有this指针
    //              3、不能访问普通成员变量
    //              4、能访问静态成员变量
    static void func()
    {
        a++;
    }
public:
    static int a;
};

int Test::a=0;  //静态成员变量在类外单独初始化

int main()
{
    //访问静态变量不需要借助任何对象
    // std::cout<<Test::a<<std::endl;

    Test *t= new Test;
    Test *t1= new Test;
    Test::func();
    delete t;

    //判断是否存在内存泄漏
    std::cout<<Test::a<<std::endl;
    return 0;
}